<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* 
        
        // 作业：给arr添加去重方法 
        // arr.uniq()
        // 不改变数组本身

        
        */

        console.log(Array.prototype);
        // 给数组的原型添加了一个方法
        Array.prototype.uniq = function () {
            console.log('uniq');
            // this-> 就是数组对象
            console.log(this);
            // 把数组转为set，set转为数组
            return [...new Set(this)]
        }

        let arr = [4, 5, 4];
        let r = arr.uniq()
        console.log(r);
        console.log(arr);

        let arr2 = [3, 4, 5, 4];
        console.log(arr2.uniq());


        // arr.myForEach(function(v,i){  log(v,i)})
        // -类 -》  把原来的写选项卡 ---》使用es6类写

        // Array.prototype.forEach = function () {
        //     console.log('aa');
        // }


        Array.prototype.myForEach = function (fn) {

            // 调用 myForEach的时候，把实参函数 传入 形参fn
            // fn = function(v,i){   console.log(v, i);   }
            // fn(4, 0)// 
            // fn(5, 1)// 
            // fn(4, 2)// 
            // myForEach 相当于 获取到外部定义的函数的函数
            // 遍历数组--没遍历一次 调用fn一次
            for (let i = 0; i < this.length; i++) {
                // fn 传入 数组的元素 和 元素的下标
                fn(this[i], i)
            }

            console.log('myForEach');
        }



        arr.myForEach(function (v, i) {
            // 4 0
            // 5 1
            // 4 2
            console.log(v, i);
        });

        arr.forEach(function () {
            console.log('aa');
        })
    </script>

</body>

</html>